import java.util.Random;
import java.util.Scanner;

public class Test1 {

    //查找一个数的二进制里有几个1
    public static void main(String[] args) {
        //查找一个数的二进制里有几个1
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你要知道的数字:");
        int num = scanner.nextInt();
        int count = 0;
        while (num != 0) {
            num = num & (num - 1);      //n & (n-1) -->其n的二进制都会少一个1
            count++;
        }
        System.out.println(count);
    }

    //水仙花数-->一个数字，每个数字的位数次方的和正好等于该数  eg:153（3位数） 1^3 + 5^3 + 3^3 = 153
    public static void main2(String[] args) {
        //水仙花数-->一个数字，每个数字的位数次方的和正好等于该数  eg:153（3位数） 1^3 + 5^3 + 3^3 = 153
        for (int i = 1; i < 999999; i++) {
            int count = 0;  //记录位数
            int tmp = i;    //i的临时变量
            while (tmp != 0){
                tmp /= 10;
                count++;
            }
            tmp = i;
            int sum = 0;
            while (tmp != 0){
                sum += Math.pow(tmp % 10,count);    //sum = sum + Math.pow(tmp % 10,count);会报错，因为pow返回的类型是double类型
                tmp /= 10;
            }
            if(sum == i){
                System.out.println(i);
            }
        }
    }

    //猜数字游戏
    public static void main1(String[] args) {
        //猜数字游戏
        Scanner sacnner = new Scanner(System.in);
        Random random = new Random();   //生成随机数
        int randNum = random.nextInt(100);  //生成数的范围为[0,100)
        while (true) {
            System.out.println("请输入你要猜的数字：");
            int num = sacnner.nextInt();
            if(num < randNum) {
                System.out.println("猜小了");
            } else if (num == randNum) {
                System.out.println("猜对了");
                break;
            } else {
                System.out.println("猜大了");
            }
        }
        sacnner.close();
    }
}
